package com.seed.core.enumeration;

import com.mybatisflex.annotation.EnumValue;

public enum ColumnType {
    VARCHAR("VARCHAR", "变长字符串"),
    CHAR("CHAR", "定长字符串"),
    TINYTEXT("TINYTEXT", "微文本"), // 最大长度255字节
    TEXT("TEXT", "文本"), // 最大长度65535字节
    MEDIUMTEXT("MEDIUMTEXT", "中文本"), // 最大长度16,777,215字节
    LONGTEXT("LONGTEXT", "长文本"), // 最大长度4,294,967,295字节
    TINYINT("TINYINT", "微整形"), // 取值范围： 带符号-128-127，无符号0-255
    SMALLINT("SMALLINT", "小整形"), // 取值范围： 带符号-32768-32767，无符号0-65535
    MEDIUMINT("MEDIUMINT", "中整形"), // 取值范围： 带符号-8388608-8388607，无符号0-16777215
    INT("INT", "整形"), // 取值范围： 带符号-2147413648-2147413647，无符号0-4294967295
    BIGINT("BIGINT", "大整形"), // 取值范围： 带符号-9223372036854775808-9223372036854775807，无符号0-18446744073709551615
    DOUBLE("DOUBLE", "双精度浮点数"),
    FLOAT("FLOAT", "单精度浮点数"),
    DECIMAL("DECIMAL", "定点数"),
    BIT("BIT", "布尔"),
    ENUM("ENUM", "枚举"), // 从预定义列表里选1个值
    SET("SET", "集合"), // 从预定义列表里选0-n个值
    DATE("DATE", "日期"), // 格式：YYYY-MM-DD 范围：1000-01-01 至 9999-12-31。
    YEAR("YEAR", "年"), // 默认格式，范围1901-2155，占用1字节
    DATETIME("DATETIME", "日期时间"), // 格式：YYYY-MM-DD HH:MM:SS 范围：1000-01-01 00:00:00 至 9999-12-31 23:59:59
    TIMESTAMP("TIMESTAMP", ""),// 格式：YYYY-MM-DD HH:MM:SS 范围：1970-01-01 00:00:01 至 2038年某时刻
    FILE("FILE", "文件"), // 文件地址
    IMAGE("IMAGE", "图像"), // 图像地址
    AVATAR("AVATAR", "头像"), // 头像地址
    PASSWORD("PASSWORD", "密码"),
    SALT("SALT", "盐"),
    ICON("ICON", "图标"), // iconify图标，如： material-symbols-light:10k
    QRCODE("QRCODE", "二维码"),
    TINYBLOB("TINYBLOB", "微二进制大对象"), // 最大存储长度为255个字节
    BLOB("BLOB", "二进制大对象"),  // 最大存储长度为65,535个字节
    MEDIUMBLOB("MEDIUMBLOB", "中二进制大对象"), // 最大存储长度为16,777,215个字节
    LONGBLOB("LONGBLOB", "长二进制大对象"), // 最大存储长度为4,294,967,295个字节
    BINARY("BINARY", "定长二进制"),
    VARBINARY("VARBINARY", "变长二进制"),
    JSON("JSON", "JSON"),
    COLOR("COLOR", "颜色"), // 如 #FF4568
    REF("REF", "引用"),
    YESNO("YESNO", "是否"),
    SEX("SEX", "性别"), // 性别，male: 男，female: 女
    AGE("AGE", "年龄"); // 年龄，取值范围0-200

    private final String value;
    private final String label;

    ColumnType(String value, String label) {
        this.value = value;
        this.label = label;
    }

    @EnumValue
    public String getValue() { return value; }

    public String getLabel() {
        return label;
    }
}
